Non-volatile memory does not require a continuous power supply to retain stored data. The state of a non-volatile memory cell is typically determined by the threshold voltage of the cell. As such, the “programming window” of a memory cell can represent the voltage range within which the threshold voltage of the memory cell can be electrically altered to represent different logic states. The larger the programming window, the easier it can be to detect the difference between logic states. However, over time a memory cell can become less reliable for a number of reasons. For example, as the number of program/erase cycles increases, the programming window can degrade (e.g. decrease) until the memory cell becomes unreliable. As another example, repeated read operations can cause nearby memory cells in the same memory block to change over time and render their data unreliable.